package com.rbac.admin.service;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 缓存服务接口
 */
public interface CacheService {

    /**
     * 设置缓存
     *
     * @param key   缓存键
     * @param value 缓存值
     */
    void set(String key, Object value);

    /**
     * 设置缓存并设置过期时间
     *
     * @param key     缓存键
     * @param value   缓存值
     * @param timeout 过期时间（秒）
     */
    void set(String key, Object value, long timeout);

    /**
     * 获取缓存
     *
     * @param key 缓存键
     * @return 缓存值
     */
    <T> T get(String key);

    /**
     * 删除缓存
     *
     * @param key 缓存键
     */
    void delete(String key);

    /**
     * 批量删除缓存
     *
     * @param pattern 匹配模式
     */
    void deleteByPattern(String pattern);

    /**
     * 判断缓存是否存在
     *
     * @param key 缓存键
     * @return 是否存在
     */
    boolean hasKey(String key);

    /**
     * 获取缓存过期时间
     *
     * @param key 缓存键
     * @return 过期时间（秒）
     */
    long getExpire(String key);

    /**
     * 设置缓存过期时间
     *
     * @param key     缓存键
     * @param timeout 过期时间（秒）
     */
    void expire(String key, long timeout);

    /**
     * 获取匹配模式的所有键
     *
     * @param pattern 匹配模式
     * @return 键集合
     */
    Set<String> keys(String pattern);
    
    /**
     * 清除所有缓存
     */
    void clearAll();
    
    /**
     * 清除用户缓存
     * 
     * @param username 用户名
     */
    void clearUserCache(String username);
    
    /**
     * 清除菜单缓存
     */
    void clearMenuCache();
    
    /**
     * 清除权限缓存
     */
    void clearPermissionCache();
    
    /**
     * 获取缓存统计信息
     * 
     * @return 缓存统计信息
     */
    Map<String, Object> getCacheStats();
}